vlwkaos' digital garden
TypeScript - field initialize order
문제
ES6 작동 방식에 의해 일반적인 OOP와 다른 순서로 필드가 초기화 되므로 상속구조를 만들시 주의해야한다.
주로 마주하는 문제는 상속받는 클래스에서 선언했으나 부모 클래스의 값으로 변경되어있거나, transpile시점에서 undefined로 초기화되는 경우이다.
derived의 memberProperty는 base의 생성자에서 파생되는 어느 스코프에도 존재하지 않는다.
babel transpiling중에 class field undefined 처리
https://github.com/babel/babel/issues/9105
해결
derived class에서 constructor이외 스코프에서 초기화하는 경우 declare 옵션을 사용하고 클래스 내부에서도 초기화가 아닌 type으로 존재한다는
declare
로 필드를 선언해야한다.
[[프론트 환경설정 특이케이스]]
연관 링크
Field Initialize Order
https://github.com/microsoft/TypeScript/issues/1617
Referred in
TypeScript 타입스크립트
TypeScript - field initialize order